#define _CRT_SECURE_NO_WARNINGS 1

//#include <iostream>
//#include <string>
//#include <algorithm>
//using namespace std;
//
//void TestString1()
//{
//	string s1("hello world");
//	string::iterator it = s1.begin();
//	while (it != s1.end())
//	{
//		cout << *it << " ";
//		++it;
//	}
//	cout << endl;
//
//	string::reverse_iterator rit = s1.rbegin();
//	while (rit != s1.rend())
//	{
//		cout << *rit << " ";
//		++rit;
//	}
//	cout << endl;
//
//}
//
//void TestString2()
//{
//	string s1 = "hello world";
//	s1.push_back('x');
//	cout << s1 << endl;
//
//	string s2 = s1;
//
//	string s3 = s1 + s2;
//	
//	cout << s3 << endl;
//
//}
//
//void TestString3()
//{
//	string s = "hello world";
//	string::iterator it = s.begin();
//	while (it != s.end())
//	{
//		cout << *it ;
//		++it;
//	}
//	cout << endl;
//
//	for (int i = 0; i < s.size(); i++)
//	{
//		cout << s[i];
//	}
//	cout << endl;
//
//	for (auto e : s)
//	{
//		cout << e;
//	}
//}
//
//void TestString4()
//{
//	string s = "adejkibc";
//	string s2("ccccc");
//	s.append("www");
//	s.append(s2);
//
//	s2.insert(0, "x");
//
//	string s3("abcdef");
//
//	s3.insert(s3.begin(), s3.begin(), s2.end());
//
//	cout << s3;
//}
//
//void TestString5()
//{
//	string s(20,'x');
//	s.reserve(200);
//	cout << s.capacity() <<endl;
//	
//	
//	cout << s.size() << endl;
//	cout << s.capacity() << endl;
//}
//
//int main()
//{
//	//TestString1();
//	
//	//TestString2();
//
//	//TestString3();
//	
//	//TestString4();
//	
//	//TestString5();
//	
//	int arr[5] = {1,2,3,4,5};
//	int count = 0;
//	for (auto e : arr)
//	{
//		count += e;
//	}
//	cout << count << endl;
//	return 0;
//}
//
//bool isNumber(const char ch)
//{
//	return ch >= '0'
//		&& ch <= '9';
//}
//int findNumber(string& s)
//{
//	for (int i = 0; i < s.size(); i++)
//	{
//		if (isNumber(s[i]))
//			return i;
//	}
//
//	return -1;
//}
//int myAtoi(string str) {
//	int sign = 1;
//	int ret = findNumber(str);
//	if (ret!=0 && str[ret - 1] == '-' )
//		sign = -1;
//	string tmp;
//	while (isNumber(str[ret]))
//	{
//		tmp.insert(tmp.begin(), str[ret++]);
//	}
//	int count = 0;
//	int pos = 0;
//	if(tmp.size() > 32)
//		tmp.resize(32);
//	for (auto ch : tmp)
//	{
//		count += (ch - '0') * pow(10, pos++);
//	}
//
//	return count * sign;
//}
//
//
//int main()
//{
//	string s("xxxx x");
//	cout << s.size() - s.find_first_of(' ') << endl;
//	return 0;
//}


#include "string.h"

namespace lin
{

	void testString1()
	{
		string s1;
		string s2("hello world");

		cout << s1.c_str() << endl;
		cout << s2.c_str() << endl;

		s1 = s2;
		string s3 = s1;
		cout << s1.c_str() << endl;
	}
	void testString2()
	{
		string s1 = "hello world";
		const string s2(s1);
		for (auto ch : s1)
		{
			ch++;
			cout << ch << " ";
		}
		cout << endl;
		string::const_iterator cit = s2.begin();
		while (cit != s2.end())
		{
			cout << *cit << " ";
			cit++;
		}
	}

	void testString3()
	{
		string s1("hello world");
		cout << s1[2] << endl;

		const string s2("hello world");
		cout << s2[0] << endl;

		s1.resever(50);
	}

	void testString4()
	{
		string s1("xxxxx");

		s1.append("yy");
		s1.push_back('c');
		s1.insert(0, 'w');
		s1.insert(0,"zzzzz");
		cout << s1.c_str() << endl;

		s1.erase(6, 2);
		cout << s1.c_str() << endl;
		s1.erase();
		cout << s1.c_str() << endl;

	}

	void testString5()
	{
		string s1("hello world");
		string s2("xxxxxx");
		cout << s2.find('x') << endl;
		cout << s1.find("rl") << endl;
		
	}
	void testString6()
	{
		lin::string url("https://gitee.com/ailiangshilove/cpp-class/blob/master/%E8%AF%BE%E4%BB%B6%E4%BB%A3%E7%A0%81/C++%E8%AF%BE%E4%BB%B6V6/string%E7%9A%84%E6%8E%A5%E5%8F%A3%E6%B5%8B%E8%AF%95%E5%8F%8A%E4%BD%BF%E7%94%A8/TestString.cpp");
		size_t pos1 = url.find(':');
		lin::string url1 = url.substr(0, pos1 - 0);
		cout << url1.c_str() << endl;

		size_t pos2 = url.find('/', pos1 + 3);
		lin::string url2 = url.substr(pos1 + 3, pos2 - (pos1 + 3));
		cout << url2.c_str() << endl;

		lin::string url3 = url.substr(pos2 + 1);
		cout << url3.c_str() << endl;
	}

	void testString7()
	{
		string s("xxxxx");
		cout << s << endl;
		cin >> s;
		cout << s << endl;

	}

}


int main()
{
	lin::testString1();
	return 0;
}